package com.sunday.common.mq.rabbit.study.base.e2_WorkQueues;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import com.sunday.common.mq.rabbit.study.base.ConnectionUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.Scanner;

@Slf4j
public class NewTask {

    private static final String TASK_QUEUE_NAME = "task_queue";

    public static void main(String[] argv) throws Exception {

        ConnectionFactory factory = ConnectionUtil.factory();

        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {

            channel.queueDeclare(TASK_QUEUE_NAME, false, false, false, null);

            while (true) {
                Scanner scan = new Scanner(System.in);//实例化Scanner对象
                log.info("请输入文本:");
                String message = scan.nextLine();//接受用户输入的字符串

                if (message.equals("233")) {
                    break;
                }

                /**
                 * 我们确信task_queue队列不会丢失 即使 RabbitMQ 重新启动。现在我们需要将我们的消息标记为持久 - 通过设置消息属性（实现基本属性） 到值PERSISTENT_TEXT_PLAIN。
                 *
                 * 无名交换
                 * 我们对交换一无所知， 但仍然能够将消息发送到队列。那是可能的 因为我们使用的是默认交换，我们用空字符串 （“”） 标识。
                 * 回想一下我们之前是如何发布的消息的：
                 * channel.basicPublish("", "hello", null, message.getBytes());
                 * 第一个参数是交易所的名称。 空字符串表示默认或无名称交换：消息是 路由到具有路由密钥指定的名称的队列（如果存在）
                 *
                 */
                channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes("UTF-8"));
                log.info(" [x] Sent '{}'", message);
            }
        }
    }

}
